﻿using System;
using System.Collections;
using System.Linq;
using System.Web;

/// <summary>
/// En esta clase se almacenaran los reportes que la persona desea imprimir o exportar.
/// </summary>
public class ListaReportes
{
    private static ListaReportes _instancia;
    /// <summary>
    /// Lista en la que se almacenará los reportes que se estan mostrando en ese momento.
    /// </summary>
    private ArrayList _ListaMostrados;

    /// <summary>
    /// Lista en la que se almacenarán los reportes que el usuario agregue, para luego exportarlos o mostrarlos.
    /// </summary>
    private ArrayList _ListaAgregados;

    public ArrayList ListaAgregados
    {
        get { return _ListaAgregados; }
    }

    public ArrayList ListaMostrados
    {
        get { return _ListaMostrados; }
    }

    /// <summary>
    /// Este metododo se utiliza para agregar nuevos reportes a la lista de reportes a mostrar.
    /// </summary>
    /// <param name="nuevo">El reporte a agregar</param>
    public bool agregarMostrados(Reporte nuevo)
    {
        try
        {
            ListaMostrados.Add(nuevo);
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

    /// <summary>
    /// Este metododo se utiliza para agregar nuevos reportes a la lista del usuario
    /// </summary>
    /// <param name="nuevo">El reporte a agregar</param>
    /// <returns></returns>
    public bool agregarLista(Reporte nuevo)
    {
        try
        {
            ListaAgregados.Add(nuevo);
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }


    /// <summary>
    /// Metodo que remueve todos los elementos de la lista de la lista de reportes mostrados,
    /// usualmente se usará al momento de cambiar de ventana.
    /// </summary>
    /// <returns></returns>
    public bool destruirMostrados() 
    {
        try
        {
            ListaMostrados.Clear();
            return true;
        }
        catch
        {
            return false;
        }

    }


    /// <summary>
    /// Constructor privado, para cumplir con el sigleton
    /// </summary>
    private ListaReportes()
    {
        this._ListaAgregados = new ArrayList();
        this._ListaMostrados = new ArrayList();
    }

    /// <summary>
    /// Metodo que regresa la instancia unica de esta clase.
    /// </summary>
    /// <returns></returns>
    public static ListaReportes Obtener()
    {
        if (_instancia  == null)
        {
            _instancia = new ListaReportes();
        }
        return _instancia;
    }
}